/*************************************************************************
	> File Name: server.h
	> Author: 李远远
	> Mail: 
	> Created Time: 2018年08月27日 星期一 10时23分24秒
 ************************************************************************/

#ifndef _SERVER_H
#define _SERVER_H

#include <struct.h>
#include <init_socket.h>
#include <read_socket.h>
#include <read_fifo.h>
#include <init.h>
#include <dispose.h>
#include <sqlite_read.h>
#include <mytime.h>

/*
 * 函数名:init
 * 功能:初始化服务器数据
 * 参数:无,
 * 返回值:无
 */
void init();	
//初始化个线程管道,读取配置信息


/*
 * 函数名:socket_pthread
 * 功能:socket线程函数
 * 参数:void *,
 * 返回值:void *
 */
void *socket_pthread(void *s);	
//创建socket并监听,接收客户端连接,接收客户端发送的消息,对消息进行不同的处理
/*
接收:从客户端接收
	1.登录信息					标识：#ADMI#	通过数据库接收消息管道,发送给数据库操作线程
	2.设备控制信息				标识：#DEVI#	通过向M0板发送消息管道,发送给向M0板发送消息线程
	3.修改配置信息				标识：#PZXG#	通过数据库接收消息管道,发送给数据库操作线程,通过采集消息线程管道发送给采集消息线程,
	4.查询历史信息				标识：#CXLS#	通过数据库接收消息管道,发送给数据库操作线程
	5.如果登录成功				标识：#DLCG#	通过采集消息线程管道,把客户端登录状态信息发送给采集消息线程
发送:向客户端发送
	1.客户端与服务器通信的结构体	标识：#ZTXX#
	2.配置信息结构体				标识：#PZXX#
	3.登录信息返回结果				标识：#ADMR#
	4.历史数据						标识：#LSSJ#
*/


/*
 * 函数名:sqlite_pthread
 * 功能:数据库操作线程函数
 * 参数:void *,
 * 返回值:void *
 */
void *sqlite_pthread(void *s);	
//通过读取管道信息,操作数据库
/*
从管道读取的信息:
	1.保存采集消息线程发送过来的实时数据	标识：#ZTXX#	数据库插入数据
	2.登录信息								标识：#ADMI#	数据库查询,查询结果通过socket线程管道发送给socket线程	
	3.查询历史信息							标识：#CXLS#	查询数据库,查询结果通过socket线程管道发送给socket线程	
	4.修改配置信息							标识：#PZXG#	修改数据库配置信息
从管道发送出去的信息:
	1.登录信息返回结果						标识：#ADMR#	查询结果通过socket线程管道发送给socket线程
	2.查询历史信息反馈						标识：#LSSJ#	查询结果通过socket线程管道发送给socket线程
*/

/*
 * 函数名:toward_M0_pthread
 * 功能:向M0板发送消息线程线程函数
 * 参数:void *,
 * 返回值:void *
 */
void *toward_M0_pthread(void *s);
//通过管道读取信息
/*
	设备控制信息		标识：#DEVI#	把该信息发送给M0板
*/

/*
 * 函数名:collect
 * 功能:采集M0板数据并处理的函数
 * 参数:无
 * 返回值:无
 */
void collect();
//从M0板采集数据,并进行处理
/*
从管道接收的信息:
	1.客户端登录状态和客户端登录socketID		标识：#DEVI#
从M0板采集数据:
	1.数据的采集
	2.数据的初步处理,比如超级10次求平均值
	3.数据的处理,环境数据是否超标,环境是否改变,设备状态是否需要改变
	4.实时数据的保存,通过数据库操作线程管道,把实时数据发送给数据库		标识：#ZTXX#
	5.如果用户登录,向客户端发送实时数据信息								标识：#ZTXX#
*/

/*
 * 函数名:close_server
 * 功能:关闭服务器
 * 参数:无
 * 返回值:无
 */
void close_server();

/*
 * 函数名:fifo_write
 * 功能:通过管道发送数据
 * 参数:	int fifo_fd:管道打开的文件标识符
			int socketID:客户端连接的socketID,无客户端连接填写0
			void *data:要发送的数据
 * 返回值:无
 */
int fifo_write(int fifo_fd, int socketID, void *data);

#endif
